import router from "./router";
import store from "./store";

// 白名单
const whiteList = ["/login"];
/**
 * 路由前置守卫
 */
router.beforeEach(async (to, from, next) => {
  // 有token
  if (store.getters.token) {
    // 不允许进入login页面
    if (to.path === "/login") {
      next("/");
    } else {
      // 有token无用户信息则去请求
      if (!store.getters.hasUserInfo) {
        // 触发获取用户信息的 action，并获取用户当前权限
        const { permission } = await store.dispatch("user/getUserInfo");
        // 处理用户权限，筛选出需要添加的权限
        const filterRoutes = await store.dispatch(
          "permission/filterRoutes",
          permission.menus
        );
        // 利用 addRoute 循环添加
        filterRoutes.forEach((item) => {
          router.addRoute(item);
        });
        // 添加完动态路由之后，需要在进行一次主动跳转
        return next(to.path);
      }
      next();
    }
  } else {
    // 是否在白名单里
    if (whiteList.includes(to.path)) {
      next();
    } else {
      next("/login");
    }
  }
});
